% preamble

% misc packages
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{url}
\usepackage[ngerman]{babel}
\usepackage{graphicx}
\usepackage{amsmath} 
\usepackage{amsfonts}
\usepackage{color} 
\usepackage[lofdepth,lotdepth]{subfig}
\usepackage{pdflscape}
\usepackage{listings}
% header
\usepackage{fancyhdr}
\setlength{\headheight}{15.2pt}
\pagestyle{fancyplain}

% header definition
\fancyhf{}	% clear settings

%listings def
\lstset{language=SQL,breaklines=true}
 
% content
\lhead{\fancyplain{}{ISE - SS 12}}	%  lecture top left
\rhead{\fancyplain{}{Milestone 1}}		% exercise number top right
\cfoot{\fancyplain{}{\thepage}}			% pagenumber bottom center
\lfoot{\fancyplain{}{Borckholder, Graf, Penzinger}}		% authors bottom left

%ruler
\renewcommand{\headrulewidth}{0.5pt}
\renewcommand{\footrulewidth}{0pt}

% document
\begin{document}

\title{Architektur : Daten + Persistenz}
\author{Chris Borckholder, Manuel Graf, Matthias Penzinger} 
\date{\today}
\maketitle

Die Komponenten der Datenschicht unserer Anwendung
\begin{itemize}
	\item \subsubsection*{RDBMS}Lokale MySQL 5.5 (Community Edition) Datenbank \footnote{http://www.mysql.com/}
	\item \subsubsection*{Data Abstraction Layer}Object-Relational-Mapper Propel (php) \footnote{http://www.propelorm.org/}
	\item \subsubsection*{Generierung}Custom DB-Filler 'ISE' + jooq ORM (java) \footnote{http://www.jooq.org/}
\end{itemize}

Abbildung \ref{PS} zeigt das physische Schema der Datenbank. Das entsprechende DDL-Skript 'create.sql' ist im Anhang enthalten. Zum Initialisieren und Befüllen des Schemas kommt der aus der LV DBS "ubernommene und angepasste DB-Filler zum Einsatz. Der DB-Filler ist in Java implementiert und wird durch ein Apache Ant \footnote{http://ant.apache.org/} Skript gesteuert. Nach der Anpassung der Verbindungs- und Generierungsparameter können verschiedene Tasks ausgef"uhrt werden:
\begin{itemize}
	\item \textbf{sql.build} Erzeugt das in "create.sql" definierte physische Schema (Vorhandene Tabellen werden gedroppt)
	\item \textbf{jooq.generate} ORM-Java Objekte durch jooq generieren
	\item \textbf{fill} Erzeugt Testdaten und f"ugt sie in die Datenbank ein
	\item \textbf{create} alle oben genannten tasks
\end{itemize}
F"ur alle Tabellen, ausser \emph{reservation} werden Testdaten erzeugt.

Zum Zugriff auf die Datenbank aus der Webapplikation heraus verlassen wir uns auf Propel. Propel ist ein ORM-Mapper, der "ahnlich wie jooq, Zugriffsobjekte (ActiveRecord Pattern) f"ur jede Tabelle im Schema erstellt.

\clearpage
\begin{figure}[h!t]
	\centering
	\includegraphics[width=\textwidth]{relational_model.jpg}
	\caption{Physisches Schema}
	\label{PS}
\end{figure}

\clearpage

\appendix

\section{create.sql}

\lstset{language=SQL}
\lstinputlisting{create.sql}

\end{document}